package com.bridgeintelligent.tag.mapper;

import com.bridgeintelligent.tag.webserver.dim.mgmt.api.DimCatalog;
import com.bridgeintelligent.tag.webserver.dim.mgmt.api.vo.DimCatalogVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * Created by JackCheung on 2019/9/9 10:28 PM.
 */
@Mapper
public interface CatalogMapper {

    /**
     * 因为别名原因不用原生的
     *
     * @param id
     * @return
     */
    DimCatalog findById(String id);

    /**
     * 查找目录列表
     *
     * @return
     */
    List<DimCatalog> findCatalogList();

    /**
     * 根据目录ID列表查询目录列表
     * @param catalogIds
     * @return
     */
    List<DimCatalog> findCatalogByIds(@Param("catalogIds")List<String> catalogIds);

    /**
     * 查找目录列表-tree
     * @return
     */
    List<DimCatalogVO> findCatalogs();

    /**
     * 根据目录ID查询目录列表
     * @param catalogIds
     * @return
     */
    List<DimCatalogVO> findCatalogsNew(@Param("catalogIds")List<String> catalogIds);

    /**
     * 删除目录
     *
     * @param id
     */
    void del(String id);

    /**
     * 查找下一层目录
     *
     * @param id
     * @return
     */
    List<DimCatalog> findNext(String id);

    /**
     * 新增目录
     *
     * @param id
     * @param name
     * @param parent_id
     * @param number
     * @param level
     */
    void add(@Param("id") String id, @Param("name") String name, @Param("parent_id") String parent_id, @Param("number") Integer number, @Param("level") Integer level);

    /**
     * 修改目录
     *
     * @param dimCatalog
     */
    void update(DimCatalog dimCatalog);

    /**
     * 查找父目录
     *
     * @param id
     * @return
     */
    int findParent(@Param("id") String id);

    /**
     * 查找目录名
     *
     * @param id
     * @return
     */
    String getName(String id);

    /**
     * 根据目录名称查询目录是否存在
     *
     * @param map
     * @return
     */
    String findCatalogByName(Map map);

    /**
     * 查找目录名是否存在
     *
     * @param name
     * @param parentId
     * @return
     */
    int findCatalogNameIsExits(@Param("name") String name, @Param("parent_id") String parentId);

    /**
     * 查找最大数
     *
     * @param parentId
     * @return
     */
    Integer findMaxNumber(@Param("parentId") String parentId);


    Integer findMaxNumberInLevel(@Param("level") String level);

    /**
     * 查找父目录集合
     *
     * @param parentId
     * @return
     */
    List<DimCatalog> findParentList(@Param("parent_id") String parentId);

    /**
     * 根据id查找目录
     *
     * @param id
     * @return
     */
    DimCatalog findOne(@Param("id") String id);

    /**
     * 根据number查找目录
     *
     * @param parentId
     * @param number
     * @return
     */
    DimCatalog findByNumber(@Param("parent_id") String parentId, @Param("number") Integer number);

    /**
     * 根据用户Id查找目录集合
     *
     * @param userId
     * @return
     */
    List<DimCatalog> listInMine(@Param("user_id") String userId);

    /**
     * 目录标签数减一
     *
     * @param catalogId
     */
    void subNum(@Param("catalogId") String catalogId, @Param("theme") String theme);

    /**
     * 目录标签数加一
     *
     * @param catalogId
     */
    void addNum(@Param("catalogId") String catalogId, @Param("theme") String theme);

    /**
     * 根据名称查询目录实体
     * @param dName
     * @return
     */
    DimCatalog findByCataName(String dName);
}
